package com.faithbj.process;

import java.util.List;
import java.util.Map;

/**
 * 标准流程引擎服务.
 * 包含启动流程、开始任务、完成任务、任务失败等
 * User: xiongyuanwei
 * Date: 12-7-4
 * Time: 下午7:14
 */
public interface ProcessEngineService {

    /**
     * 启动流程.
     * @param vars 流程变量
     *  @return 流程实例id
     */
    long startProcess(Map<String, Object> vars);

    void claim(long taskId, String userId, TaskModelFilter filter);

    void claim(long taskId, String userId, List<String> groups, TaskModelFilter filter);

    /**
     * 开始任务.
     * @param taskId 任务id
     * @param userId 用户名
     */
    void start(long taskId, String userId);

    /**
     * 完成任务.
     * @param taskId 任务id
     * @param userId 用户名
     */
    void complete(long taskId, String userId);

    /**
     * 完成任务.
     * @param taskId 任务id
     * @param userId 用户名
     * @param output 流程变量, 任务的产出
     */
    void complete(long taskId, String userId, Map<String, Object> output);

    /**
     * 任务失败
     * @param taskId 任务id
     * @param userId 用户名
     * @param fault 失败原因
     */
    void fail(long taskId, String userId, String fault);
}
